ํ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์คํ ์์ ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ๊ณผ ํธ๋์ญ์ ๊ด๋ฆฌ๋ฅผ ์ํ ํต์ฌ์ธ ACID ์์ฑ(์์์ฑ, ์ผ๊ด์ฑ, ๊ณ ๋ฆฝ์ฑ, ์ง์์ฑ)์ ๊ธฐ์ด๋ฅผ ํ๊ตฌํฉ๋๋ค.
ํธ๋์ญ์ ๊ด๋ฆฌ: ACID ์์ฑ์ผ๋ก ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ ๋ง์คํฐํ๊ธฐ
์ ์ ๋ ์ํธ ์ฐ๊ฒฐ๋๊ณ ๋ฐ์ดํฐ ์ค์ฌ์ ์ธ ์ธ์์์ ์ ๋ณด์ ์ ๋ขฐ์ฑ๊ณผ ๋ฌด๊ฒฐ์ฑ์ ๋ฌด์๋ณด๋ค ์ค์ํฉ๋๋ค. ๋งค์ผ ์์ญ์ต ๊ฑด์ ํธ๋์ญ์ ์ ์ฒ๋ฆฌํ๋ ๊ธ์ต ๊ธฐ๊ด๋ถํฐ ์๋ง์ ์ฃผ๋ฌธ์ ์ฒ๋ฆฌํ๋ ์ ์ ์๊ฑฐ๋ ํ๋ซํผ์ ์ด๋ฅด๊ธฐ๊น์ง, ๊ธฐ๋ฐ์ด ๋๋ ๋ฐ์ดํฐ ์์คํ ์ ์์ ์ด ์ ํํ๊ณ ์ผ๊ด๋๊ฒ ์ฒ๋ฆฌ๋๋ค๋ ํ๊ณ ํ ๋ณด์ฅ์ ์ ๊ณตํด์ผ ํฉ๋๋ค. ์ด๋ฌํ ๋ณด์ฅ์ ์ค์ฌ์๋ ACID๋ผ๋ ์ฝ์ด๋ก ์์ฝ๋๋ ํธ๋์ญ์ ๊ด๋ฆฌ์ ๊ธฐ๋ณธ ์์น์ด ์์ต๋๋ค: Atomicity(์์์ฑ), Consistency(์ผ๊ด์ฑ), Isolation(๊ณ ๋ฆฝ์ฑ), Durability(์ง์์ฑ).
์ด ์ข ํฉ ๊ฐ์ด๋๋ ๊ฐ ACID ์์ฑ์ ์ฌ์ธต์ ์ผ๋ก ํ๊ตฌํ๋ฉฐ, ๊ทธ ์ค์์ฑ, ๊ตฌํ ๋ฉ์ปค๋์ฆ, ๊ทธ๋ฆฌ๊ณ ๋ค์ํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ๊ฒฝ์์ ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ์ ๋ณด์ฅํ๋ ๋ฐ ์์ด ์ด๋ค์ด ์ํํ๋ ์ค์ํ ์ญํ ์ ์ค๋ช ํฉ๋๋ค. ์๋ จ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ด๋ฆฌ์, ๋ณต์๋ ฅ ์๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ๋ ์ํํธ์จ์ด ์์ง๋์ด, ๋๋ ์ ๋ขฐํ ์ ์๋ ์์คํ ์ ๊ธฐ๋ฐ์ ์ดํดํ๊ณ ์ ํ๋ ๋ฐ์ดํฐ ์ ๋ฌธ๊ฐ ๋ฑ ๋๊ตฌ์๊ฒ๋ ACID๋ฅผ ๋ง์คํฐํ๋ ๊ฒ์ ๊ฒฌ๊ณ ํ๊ณ ์ ๋ขฐํ ์ ์๋ ์๋ฃจ์ ์ ๋ง๋๋ ๋ฐ ํ์์ ์ ๋๋ค.
ํธ๋์ญ์ ์ด๋ ๋ฌด์์ธ๊ฐ? ์ ๋ขฐํ ์ ์๋ ์์ ์ ์ด์
ACID๋ฅผ ๋ถ์ํ๊ธฐ ์ ์, ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ด๋ฆฌ ๋งฅ๋ฝ์์ "ํธ๋์ญ์ "์ด ๋ฌด์์ ์๋ฏธํ๋์ง ๋ช ํํ ์ดํดํด ๋ด ์๋ค. ํธ๋์ญ์ ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ํด ์ํ๋๋ ํ๋ ์ด์์ ์์ (์: ์ฝ๊ธฐ, ์ฐ๊ธฐ, ์ ๋ฐ์ดํธ, ์ญ์ )์ผ๋ก ๊ตฌ์ฑ๋ ๋ ผ๋ฆฌ์ ์์ ๋จ์์ ๋๋ค. ๊ฒฐ์ ์ ์ผ๋ก, ํธ๋์ญ์ ์ ํฌํจ๋ ๊ฐ๋ณ ๋จ๊ณ์ ์์ ๊ด๊ณ์์ด ๋จ์ผํ๊ณ ๋๋ ์ ์๋ ์์ ์ผ๋ก ์ทจ๊ธ๋๋๋ก ์ค๊ณ๋์์ต๋๋ค.
๊ฐ๋จํ๋ฉด์๋ ๋ณดํธ์ ์ผ๋ก ์ดํด๋๋ ์์๋ฅผ ์๊ฐํด ๋ณด๊ฒ ์ต๋๋ค: ํ ์ํ ๊ณ์ข์์ ๋ค๋ฅธ ๊ณ์ข๋ก ๋์ ์ด์ฒดํ๋ ๊ฒ์ ๋๋ค. ์ด ๊ฐ๋จํด ๋ณด์ด๋ ์์ ์ ์ค์ ๋ก๋ ์ฌ๋ฌ ๊ฐ์ ๊ฐ๋ณ์ ์ธ ๋จ๊ณ๋ฅผ ํฌํจํฉ๋๋ค:
- ์ถ๊ธ ๊ณ์ข์์ ๊ธ์ก์ ์ธ์ถํฉ๋๋ค.
- ์ ๊ธ ๊ณ์ข์ ๊ธ์ก์ ์ ๊ธํฉ๋๋ค.
- ํธ๋์ญ์ ๋ด์ญ์ ๊ธฐ๋กํฉ๋๋ค.
๋ง์ฝ ์ด๋ฌํ ๋จ๊ณ ์ค ์ด๋ ํ๋๋ผ๋ ์คํจํ๋ฉด(์: ์์คํ ์ถฉ๋, ๋คํธ์ํฌ ์ค๋ฅ ๋๋ ์๋ชป๋ ๊ณ์ข ๋ฒํธ๋ก ์ธํด), ์ ์ฒด ์์ ์ด ์ทจ์๋์ด์ผ ํ๋ฉฐ ๊ณ์ข๋ ์๋ ์ํ๋ก ๋์๊ฐ์ผ ํฉ๋๋ค. ํ ๊ณ์ข์์ ๋์ด ์ธ์ถ๋์๋๋ฐ ๋ค๋ฅธ ๊ณ์ข์ ์ ๊ธ๋์ง ์๊ฑฐ๋ ๊ทธ ๋ฐ๋์ ์ํฉ์ ์ํ์ง๋ ์์ ๊ฒ์ ๋๋ค. ์ด '์ ๋ถ ์๋๋ฉด ์ ๋ฌด' ์์น์ด ๋ฐ๋ก ACID ์์ฑ์ ์ํด ๊ตฌ๋๋๋ ํธ๋์ญ์ ๊ด๋ฆฌ๊ฐ ๋ณด์ฅํ๊ณ ์ ํ๋ ๊ฒ์ ๋๋ค.
ํธ๋์ญ์ ์ ํนํ ์ฌ๋ฌ ์ฌ์ฉ์๋ ์ ํ๋ฆฌ์ผ์ด์ ์ด ๋์ผํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋์์ ์ํธ ์์ฉํ๋ ํ๊ฒฝ์์ ๋ฐ์ดํฐ์ ๋ ผ๋ฆฌ์ ์ ํ์ฑ๊ณผ ์ผ๊ด์ฑ์ ์ ์งํ๋ ๋ฐ ํ์์ ์ ๋๋ค. ํธ๋์ญ์ ์ด ์๋ค๋ฉด ๋ฐ์ดํฐ๋ ์ฝ๊ฒ ์์๋ ์ ์์ผ๋ฉฐ, ์ด๋ ์ฌ๊ฐํ ์ฌ์ ์ ์์ค, ์ด์ ๋นํจ์จ์ฑ, ๊ทธ๋ฆฌ๊ณ ์์คํ ์ ๋ํ ์์ ํ ์ ๋ขฐ ์์ค๋ก ์ด์ด์ง ์ ์์ต๋๋ค.
ACID ์์ฑ ํํค์น๊ธฐ: ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ์ ๊ธฐ๋ฅ
ACID์ ๊ฐ ๊ธ์๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ํธ๋์ญ์ ์ ์ ๋ขฐ์ฑ์ ์ข ํฉ์ ์ผ๋ก ๋ณด์ฅํ๋ ๋๋ ทํ๋ฉด์๋ ์ํธ ์ฐ๊ฒฐ๋ ์์ฑ์ ๋ํ๋ ๋๋ค. ๊ฐ๊ฐ์ ์์ธํ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
1. ์์์ฑ(Atomicity): ์ ๋ถ ์๋๋ฉด ์ ๋ฌด, ์ค๊ฐ์ ์๋ค
์์์ฑ์ ACID ์์ฑ ์ค ๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ผ๋ก ์ฌ๊ฒจ์ง๋ฉฐ, ํธ๋์ญ์ ์ด ๋จ์ผํ๊ณ ๋๋ ์ ์๋ ์์ ๋จ์๋ก ์ทจ๊ธ๋์ด์ผ ํจ์ ๊ท์ ํฉ๋๋ค. ์ด๋ ํธ๋์ญ์ ๋ด์ ๋ชจ๋ ์์ ์ด ์ฑ๊ณต์ ์ผ๋ก ์๋ฃ๋์ด ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ปค๋ฐ(commit)๋๊ฑฐ๋, ์๋๋ฉด ์๋ฌด๊ฒ๋ ์ปค๋ฐ๋์ง ์์์ผ ํจ์ ์๋ฏธํฉ๋๋ค. ํธ๋์ญ์ ์ ์ผ๋ถ๊ฐ ์คํจํ๋ฉด ์ ์ฒด ํธ๋์ญ์ ์ด ๋กค๋ฐฑ(rolled back)๋๊ณ , ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ํธ๋์ญ์ ์ด ์์๋๊ธฐ ์ ์ ์ํ๋ก ๋ณต์๋ฉ๋๋ค. ๋ถ๋ถ์ ์ธ ์๋ฃ๋ ์์ผ๋ฉฐ, ์ด๋ "์ ๋ถ ์๋๋ฉด ์ ๋ฌด" ์๋๋ฆฌ์ค์ ๋๋ค.
์์์ฑ์ ๊ตฌํ: ์ปค๋ฐ๊ณผ ๋กค๋ฐฑ
๋ฐ์ดํฐ๋ฒ ์ด์ค ์์คํ ์ ์ฃผ๋ก ๋ ๊ฐ์ง ํต์ฌ ๋ฉ์ปค๋์ฆ์ ํตํด ์์์ฑ์ ๋ฌ์ฑํฉ๋๋ค:
- ์ปค๋ฐ(Commit): ํธ๋์ญ์ ๋ด์ ๋ชจ๋ ์์ ์ด ์ฑ๊ณต์ ์ผ๋ก ์คํ๋๋ฉด ํธ๋์ญ์ ์ "์ปค๋ฐ"๋ฉ๋๋ค. ์ด๋ ๋ชจ๋ ๋ณ๊ฒฝ ์ฌํญ์ ์๊ตฌ์ ์ผ๋ก ๋ง๋ค๊ณ ๋ค๋ฅธ ํธ๋์ญ์ ์ ๋ณด์ด๊ฒ ํฉ๋๋ค.
- ๋กค๋ฐฑ(Rollback): ํธ๋์ญ์ ๋ด์ ์ด๋ค ์์ ์ด ์คํจํ๊ฑฐ๋ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ฉด ํธ๋์ญ์ ์ "๋กค๋ฐฑ"๋ฉ๋๋ค. ์ด๋ ํด๋น ํธ๋์ญ์ ์ ์ํด ์ด๋ฃจ์ด์ง ๋ชจ๋ ๋ณ๊ฒฝ ์ฌํญ์ ์ทจ์ํ๊ณ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ํธ๋์ญ์ ์์ ์ ์ ์ํ๋ก ๋๋๋ฆฝ๋๋ค. ์ด๋ ์ผ๋ฐ์ ์ผ๋ก ๋ณ๊ฒฝ ์ฌํญ์ด ์ ์ฉ๋๊ธฐ ์ ๋ฐ์ดํฐ์ ์ด์ ์ํ๋ฅผ ๊ธฐ๋กํ๋ ํธ๋์ญ์ ๋ก๊ทธ(์ธ๋ ๋ก๊ทธ ๋๋ ๋กค๋ฐฑ ์ธ๊ทธ๋จผํธ๋ผ๊ณ ๋ ํจ)๋ฅผ ์ฌ์ฉํ์ฌ ์ด๋ฃจ์ด์ง๋๋ค.
๋ฐ์ดํฐ๋ฒ ์ด์ค ํธ๋์ญ์ ์ ๊ฐ๋ ์ ํ๋ฆ์ ์๊ฐํด ๋ณด์ธ์:
BEGIN TRANSACTION;
-- ์์
1: A ๊ณ์ข์์ ์ธ์ถ
UPDATE Accounts SET Balance = Balance - 100 WHERE AccountID = 'A';
-- ์์
2: B ๊ณ์ข์ ์
๊ธ
UPDATE Accounts SET Balance = Balance + 100 WHERE AccountID = 'B';
-- ์ค๋ฅ ๋๋ ์ ์ฝ ์กฐ๊ฑด ํ์ธ
IF (error_occurred OR NOT balance_valid) THEN
ROLLBACK;
ELSE
COMMIT;
END IF;
์์์ฑ์ ์ค์ ์ฌ๋ก
- ๊ธ์ต ์ด์ฒด: ์์ ๋ ผ์ํ ๋ฐ์ ๊ฐ์ด, ์ธ์ถ๊ณผ ์ ๊ธ์ ๋ชจ๋ ์ฑ๊ณตํ๊ฑฐ๋ ๋ชจ๋ ์คํจํด์ผ ํฉ๋๋ค. ์ธ์ถ์ ์ฑ๊ณตํ์ง๋ง ์ ๊ธ์ด ์คํจํ๋ฉด, ๋กค๋ฐฑ์ ํตํด ์ธ์ถ์ด ์ทจ์๋์ด ์ฌ์ ์ ๋ถ์ผ์น๋ฅผ ๋ฐฉ์งํฉ๋๋ค.
-
์จ๋ผ์ธ ์ผํ ์ฅ๋ฐ๊ตฌ๋: ๊ณ ๊ฐ์ด ์ฃผ๋ฌธ์ ํ๋ฉด ํธ๋์ญ์
์๋ ๋ค์์ด ํฌํจ๋ ์ ์์ต๋๋ค:
- ๊ตฌ๋งคํ ์ํ์ ์ฌ๊ณ ๊ฐ์.
- ์ฃผ๋ฌธ ๊ธฐ๋ก ์์ฑ.
- ๊ฒฐ์ ์ฒ๋ฆฌ.
- ์ฝํ ์ธ ๊ด๋ฆฌ ์์คํ (CMS) ๊ฒ์: ๋ธ๋ก๊ทธ ๊ฒ์๋ฌผ์ ๊ฒ์ํ๋ ๊ฒ์ ์ข ์ข ๊ฒ์๋ฌผ ์ํ ์ ๋ฐ์ดํธ, ์ด์ ๋ฒ์ ์์นด์ด๋น, ๊ฒ์ ์ธ๋ฑ์ค ์ ๋ฐ์ดํธ๋ฅผ ํฌํจํฉ๋๋ค. ๊ฒ์ ์ธ๋ฑ์ค ์ ๋ฐ์ดํธ๊ฐ ์คํจํ๋ฉด ์ ์ฒด ๊ฒ์ ์์ ์ด ๋กค๋ฐฑ๋์ด ์ฝํ ์ธ ๊ฐ ์ผ๊ด๋์ง ์์ ์ํ(์: ๊ฒ์๋์์ง๋ง ๊ฒ์ ๋ถ๊ฐ๋ฅ)์ ๋์ด๋ ๊ฒ์ ๋ฐฉ์งํ ์ ์์ต๋๋ค.
์์์ฑ์ ๋ํ ๊ณผ์ ์ ๊ณ ๋ ค์ฌํญ
๊ธฐ๋ณธ์ ์ด์ง๋ง, ์์์ฑ์ ๋ณด์ฅํ๋ ๊ฒ์ ํนํ ์์ ์ด ์ฌ๋ฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ์๋น์ค์ ๊ฑธ์ณ ์๋ ๋ถ์ฐ ์์คํ ์์ ๋ณต์กํ ์ ์์ต๋๋ค. ์ฌ๊ธฐ์๋ 2๋จ๊ณ ์ปค๋ฐ(Two-Phase Commit, 2PC)๊ณผ ๊ฐ์ ๋ฉ์ปค๋์ฆ์ด ์ฌ์ฉ๋๊ธฐ๋ ํ์ง๋ง, ์ด๋ ์ฑ๋ฅ ๋ฐ ๊ฐ์ฉ์ฑ๊ณผ ๊ด๋ จ๋ ์์ฒด์ ์ธ ๊ณผ์ ๋ฅผ ์๊ณ ์์ต๋๋ค.
2. ์ผ๊ด์ฑ(Consistency): ํ๋์ ์ ํจํ ์ํ์์ ๋ค๋ฅธ ์ ํจํ ์ํ๋ก
์ผ๊ด์ฑ์ ํธ๋์ญ์ ์ด ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ํ๋์ ์ ํจํ ์ํ์์ ๋ค๋ฅธ ์ ํจํ ์ํ๋ก ์ ํํจ์ ๋ณด์ฅํฉ๋๋ค. ์ด๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๊ธฐ๋ก๋๋ ๋ชจ๋ ๋ฐ์ดํฐ๊ฐ ์ ์๋ ๋ชจ๋ ๊ท์น, ์ ์ฝ ์กฐ๊ฑด, ๊ทธ๋ฆฌ๊ณ ์ฐ์ ์์ฉ์ ์ค์ํด์ผ ํจ์ ์๋ฏธํฉ๋๋ค. ์ด๋ฌํ ๊ท์น์๋ ๋ฐ์ดํฐ ์ ํ, ์ฐธ์กฐ ๋ฌด๊ฒฐ์ฑ(์ธ๋ ํค), ๊ณ ์ ์ ์ฝ ์กฐ๊ฑด, ์ฒดํฌ ์ ์ฝ ์กฐ๊ฑด ๋ฐ "์ ํจํ" ์ํ๋ฅผ ์ ์ํ๋ ๋ชจ๋ ์ ํ๋ฆฌ์ผ์ด์ ์์ค์ ๋น์ฆ๋์ค ๋ก์ง์ด ํฌํจ๋์ง๋ง ์ด์ ๊ตญํ๋์ง๋ ์์ต๋๋ค.
๊ฒฐ์ ์ ์ผ๋ก, ์ผ๊ด์ฑ์ *๋ฐ์ดํฐ* ์์ฒด๊ฐ ์ ํจํ๋ค๋ ๊ฒ๋ง์ ์๋ฏธํ์ง ์์ต๋๋ค. ์ด๋ ์ ์ฒด ์์คํ ์ ๋ฌด๊ฒฐ์ฑ์ด ์ ์ง๋จ์ ์๋ฏธํฉ๋๋ค. ํธ๋์ญ์ ์ด ์ด๋ฌํ ๊ท์น์ ์๋ฐํ๋ ค๊ณ ์๋ํ๋ฉด, ์ ์ฒด ํธ๋์ญ์ ์ด ๋กค๋ฐฑ๋์ด ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ์ผ๊ด๋์ง ์์ ์ํ๋ก ๋ค์ด๊ฐ๋ ๊ฒ์ ๋ฐฉ์งํฉ๋๋ค.
์ผ๊ด์ฑ์ ๊ตฌํ: ์ ์ฝ ์กฐ๊ฑด๊ณผ ์ ํจ์ฑ ๊ฒ์ฌ
๋ฐ์ดํฐ๋ฒ ์ด์ค ์์คํ ์ ์ฌ๋ฌ ๋ฉ์ปค๋์ฆ์ ์กฐํฉ์ ํตํด ์ผ๊ด์ฑ์ ๊ฐ์ ํฉ๋๋ค:
-
๋ฐ์ดํฐ๋ฒ ์ด์ค ์ ์ฝ ์กฐ๊ฑด: ๋ฐ์ดํฐ๋ฒ ์ด์ค ์คํค๋ง ๋ด์ ์ง์ ์ ์๋ ๊ท์น์
๋๋ค.
- PRIMARY KEY: ๋ ์ฝ๋๋ฅผ ์๋ณํ๊ธฐ ์ํ ๊ณ ์ ์ฑ๊ณผ null ๋ถํ๋ฅผ ๋ณด์ฅํฉ๋๋ค.
- FOREIGN KEY: ํ ์ด๋ธ์ ์ฐ๊ฒฐํ์ฌ ์ฐธ์กฐ ๋ฌด๊ฒฐ์ฑ์ ์ ์งํ๋ฉฐ, ์ ํจํ ๋ถ๋ชจ ๋ ์ฝ๋ ์์ด๋ ์์ ๋ ์ฝ๋๊ฐ ์กด์ฌํ ์ ์๋๋ก ํฉ๋๋ค.
- UNIQUE: ์ด ๋๋ ์ด ์งํฉ์ ๋ชจ๋ ๊ฐ์ด ๊ณ ์ ํ๋๋ก ๋ณด์ฅํฉ๋๋ค.
- NOT NULL: ์ด์ด ๋น ๊ฐ์ ํฌํจํ ์ ์๋๋ก ๋ณด์ฅํฉ๋๋ค.
- CHECK: ๋ฐ์ดํฐ๊ฐ ๋ง์กฑํด์ผ ํ๋ ํน์ ์กฐ๊ฑด์ ์ ์ํฉ๋๋ค(์: `Balance > 0`).
- ํธ๋ฆฌ๊ฑฐ(Triggers): ํน์ ํ ์ด๋ธ์ ๋ํ ํน์ ์ด๋ฒคํธ(์: `INSERT`, `UPDATE`, `DELETE`)์ ์๋ตํ์ฌ ์๋์ผ๋ก ์คํ(๋ฐ๋)๋๋ ์ ์ฅ ํ๋ก์์ ์ ๋๋ค. ํธ๋ฆฌ๊ฑฐ๋ ๊ฐ๋จํ ์ ์ธ์ ์ ์ฝ ์กฐ๊ฑด์ ๋์ด์๋ ๋ณต์กํ ๋น์ฆ๋์ค ๊ท์น์ ๊ฐ์ ํ ์ ์์ต๋๋ค.
- ์ ํ๋ฆฌ์ผ์ด์ ์์ค ์ ํจ์ฑ ๊ฒ์ฌ: ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ๊ธฐ๋ณธ์ ์ธ ๋ฌด๊ฒฐ์ฑ์ ๊ฐ์ ํ๋ ๋์, ์ ํ๋ฆฌ์ผ์ด์ ์ ์ข ์ข ๋ฐ์ดํฐ๊ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋๋ฌํ๊ธฐ ์ ์ ๋น์ฆ๋์ค ๋ก์ง์ด ์ถฉ์กฑ๋๋์ง ํ์ธํ๊ธฐ ์ํด ์ถ๊ฐ์ ์ธ ์ ํจ์ฑ ๊ฒ์ฌ ๊ณ์ธต์ ์ถ๊ฐํฉ๋๋ค. ์ด๋ ์ผ๊ด๋์ง ์์ ๋ฐ์ดํฐ์ ๋ํ ์ฒซ ๋ฒ์งธ ๋ฐฉ์ด์ ์ญํ ์ ํฉ๋๋ค.
์ผ๊ด์ฑ ๋ณด์ฅ์ ์ค์ ์ฌ๋ก
- ๊ธ์ต ๊ณ์ข ์์ก: ๋ฐ์ดํฐ๋ฒ ์ด์ค์ `Account`์ `Balance` ์ด์ด ์ ๋ ์์๊ฐ ๋ ์ ์๋๋ก ๋ณด์ฅํ๋ `CHECK` ์ ์ฝ ์กฐ๊ฑด์ด ์์ ์ ์์ต๋๋ค. ์์์ ์ผ๋ก ์ฑ๊ณตํ ์ธ์ถ ์์ ์ด๋ผ๋ ๊ฒฐ๊ณผ์ ์ผ๋ก ์์ก์ด ์์๊ฐ ๋๋ค๋ฉด, ํด๋น ํธ๋์ญ์ ์ ์ผ๊ด์ฑ ์๋ฐ์ผ๋ก ๋กค๋ฐฑ๋ฉ๋๋ค.
- ์ง์ ๊ด๋ฆฌ ์์คํ : ์ง์ ๋ ์ฝ๋์ `Departments` ํ ์ด๋ธ์ ์ฐธ์กฐํ๋ `DepartmentID` ์ธ๋ ํค๊ฐ ์๋ ๊ฒฝ์ฐ, ์กด์ฌํ์ง ์๋ ๋ถ์์ ์ง์์ ํ ๋นํ๋ ค๋ ํธ๋์ญ์ ์ ์ฐธ์กฐ ๋ฌด๊ฒฐ์ฑ์ ์ ์งํ๊ธฐ ์ํด ๊ฑฐ๋ถ๋ฉ๋๋ค.
- ์ ์ ์๊ฑฐ๋ ์ํ ์ฌ๊ณ : `Orders` ํ ์ด๋ธ์ `QuantityOrdered`๊ฐ `AvailableStock`์ ์ด๊ณผํ ์ ์๋ค๋ `CHECK` ์ ์ฝ ์กฐ๊ฑด์ด ์์ ์ ์์ต๋๋ค. ํธ๋์ญ์ ์ด ์ฌ๊ณ ๋ณด๋ค ๋ง์ ์ํ์ ์ฃผ๋ฌธํ๋ ค๊ณ ํ๋ฉด ์ด ์ผ๊ด์ฑ ๊ท์น์ ์๋ฐํ๊ฒ ๋์ด ๋กค๋ฐฑ๋ฉ๋๋ค.
์์์ฑ๊ณผ์ ์ฐจ์ด์
์ข ์ข ํผ๋๋์ง๋ง, ์ผ๊ด์ฑ์ ์์์ฑ๊ณผ ๋ค๋ฆ ๋๋ค. ์์์ฑ์ ํธ๋์ญ์ ์ *์คํ*์ด ์ ๋ถ ์๋๋ฉด ์ ๋ฌด์์ ๋ณด์ฅํฉ๋๋ค. ์ผ๊ด์ฑ์ ํธ๋์ญ์ ์ *๊ฒฐ๊ณผ*๊ฐ ์ปค๋ฐ๋ ๊ฒฝ์ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ ํจํ๊ณ ๊ท์น์ ์ค์ํ๋ ์ํ๋ก ๋จ๊ฒจ๋ ์ ๋ณด์ฅํฉ๋๋ค. ์์์ ์ธ ํธ๋์ญ์ ์ด๋ผ๋ ๋น์ฆ๋์ค ๊ท์น์ ์๋ฐํ๋ ์์ ์ ์ฑ๊ณต์ ์ผ๋ก ์๋ฃํ๋ฉด ์ผ๊ด๋์ง ์์ ์ํ๋ก ์ด์ด์ง ์ ์์ผ๋ฉฐ, ๋ฐ๋ก ์ด ์ง์ ์์ ์ผ๊ด์ฑ ์ ํจ์ฑ ๊ฒ์ฌ๊ฐ ์ด๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด ๊ฐ์ ํฉ๋๋ค.
3. ๊ณ ๋ฆฝ์ฑ(Isolation): ๋จ๋ ์คํ์ ํ์
๊ณ ๋ฆฝ์ฑ์ ๋์์ ์คํ๋๋ ํธ๋์ญ์ ๋ค์ด ์๋ก ๋ ๋ฆฝ์ ์ผ๋ก ์คํ๋๋๋ก ๋ณด์ฅํฉ๋๋ค. ์ธ๋ถ์์๋ ํธ๋์ญ์ ๋ค์ด ๋์์ ์คํ๋๋๋ผ๋ ๋ง์น ์์ฐจ์ ์ผ๋ก, ํ๋์ฉ ์ฐจ๋ก๋ก ์คํ๋๋ ๊ฒ์ฒ๋ผ ๋ณด์ ๋๋ค. ํ ํธ๋์ญ์ ์ ์ค๊ฐ ์ํ๋ ์ฒซ ๋ฒ์งธ ํธ๋์ญ์ ์ด ์์ ํ ์ปค๋ฐ๋ ๋๊น์ง ๋ค๋ฅธ ํธ๋์ญ์ ์ ๋ณด์ฌ์๋ ์ ๋ฉ๋๋ค. ์ด ์์ฑ์ ๋ฐ์ดํฐ ์ด์ ํ์์ ๋ฐฉ์งํ๊ณ ๋์ ํ๋์ ๊ด๊ณ์์ด ๊ฒฐ๊ณผ๊ฐ ์์ธก ๊ฐ๋ฅํ๊ณ ์ ํํ๋๋ก ๋ณด์ฅํ๋ ๋ฐ ์ค์ํฉ๋๋ค.
๊ณ ๋ฆฝ์ฑ์ ๊ตฌํ: ๋์์ฑ ์ ์ด
๋ค์ค ์ฌ์ฉ์, ๋์ ํ๊ฒฝ์์ ๊ณ ๋ฆฝ์ฑ์ ๋ฌ์ฑํ๋ ๊ฒ์ ๋ณต์กํ๋ฉฐ ์ผ๋ฐ์ ์ผ๋ก ์ ๊ตํ ๋์์ฑ ์ ์ด ๋ฉ์ปค๋์ฆ์ ํฌํจํฉ๋๋ค:
์ ๊ธ(Locking) ๋ฉ์ปค๋์ฆ
์ ํต์ ์ธ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์คํ ์ ๋์ ํธ๋์ญ์ ๊ฐ์ ๊ฐ์ญ์ ๋ฐฉ์งํ๊ธฐ ์ํด ์ ๊ธ์ ์ฌ์ฉํฉ๋๋ค. ํธ๋์ญ์ ์ด ๋ฐ์ดํฐ์ ์ ๊ทผํ ๋ ํด๋น ๋ฐ์ดํฐ์ ๋ํ ์ ๊ธ์ ํ๋ํ์ฌ ๋ค๋ฅธ ํธ๋์ญ์ ์ด ์ ๊ธ์ด ํด์ ๋ ๋๊น์ง ๋ฐ์ดํฐ๋ฅผ ์์ ํ๋ ๊ฒ์ ๋ฐฉ์งํฉ๋๋ค.
- ๊ณต์ (์ฝ๊ธฐ) ์ ๊ธ(Shared (Read) Locks): ์ฌ๋ฌ ํธ๋์ญ์ ์ด ๋์ผํ ๋ฐ์ดํฐ๋ฅผ ๋์์ ์ฝ์ ์ ์๊ฒ ํ์ง๋ง, ์ด๋ค ํธ๋์ญ์ ๋ ํด๋น ๋ฐ์ดํฐ์ ์ฐ๋ ๊ฒ์ ๋ฐฉ์งํฉ๋๋ค.
- ๋ฐฐํ์ (์ฐ๊ธฐ) ์ ๊ธ(Exclusive (Write) Locks): ํธ๋์ญ์ ์ ๋ฐ์ดํฐ ์ฐ๊ธฐ๋ฅผ ์ํ ๋ ์ ์ ์ ๊ทผ ๊ถํ์ ๋ถ์ฌํ์ฌ ๋ค๋ฅธ ์ด๋ค ํธ๋์ญ์ ๋ ํด๋น ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ฑฐ๋ ์ฐ๋ ๊ฒ์ ๋ฐฉ์งํฉ๋๋ค.
- ์ ๊ธ ๋จ์(Lock Granularity): ์ ๊ธ์ ํ ์์ค, ํ์ด์ง ์์ค ๋๋ ํ ์ด๋ธ ์์ค ๋ฑ ๋ค์ํ ์์ค์์ ์ ์ฉ๋ ์ ์์ต๋๋ค. ํ ์์ค ์ ๊ธ์ ๋ ๋์ ๋์์ฑ์ ์ ๊ณตํ์ง๋ง ๋ ๋ง์ ์ค๋ฒํค๋๋ฅผ ๋ฐ์์ํต๋๋ค.
- ๊ต์ฐฉ ์ํ(Deadlocks): ๋ ์ด์์ ํธ๋์ญ์ ์ด ์๋ก ์ ๊ธ์ ํด์ ํ๊ธฐ๋ฅผ ๊ธฐ๋ค๋ฆฌ๋ฉฐ ์ ์ฒด ์ํ์ ๋น ์ง๋ ์ํฉ์ ๋๋ค. ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์คํ ์ ๊ต์ฐฉ ์ํ ๊ฐ์ง ๋ฐ ํด๊ฒฐ ๋ฉ์ปค๋์ฆ(์: ํธ๋์ญ์ ์ค ํ๋๋ฅผ ๋กค๋ฐฑ)์ ์ฌ์ฉํฉ๋๋ค.
๋ค์ค ๋ฒ์ ๋์์ฑ ์ ์ด(Multi-Version Concurrency Control, MVCC)
๋ง์ ํ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์คํ (์: PostgreSQL, Oracle, ์ผ๋ถ NoSQL ๋ณํ)์ ๋์์ฑ์ ํฅ์์ํค๊ธฐ ์ํด MVCC๋ฅผ ์ฌ์ฉํฉ๋๋ค. ์ฝ๊ธฐ ์์ ์ ์ํด ๋ฐ์ดํฐ๋ฅผ ์ ๊ทธ๋ ๋์ , MVCC๋ ํ ํ์ ์ฌ๋ฌ ๋ฒ์ ์ด ๋์์ ์กด์ฌํ๋๋ก ํ์ฉํฉ๋๋ค. ํธ๋์ญ์ ์ด ๋ฐ์ดํฐ๋ฅผ ์์ ํ๋ฉด ์ ๋ฒ์ ์ด ์์ฑ๋ฉ๋๋ค. ์ฝ๊ธฐ ์์ ์ ๋ฐ์ดํฐ์ ์ ์ ํ ๊ณผ๊ฑฐ ๋ฒ์ ์ ์ ๊ทผํ๊ณ , ์ฐ๊ธฐ ์์ ์ ์ต์ ๋ฒ์ ์์ ์๋ํฉ๋๋ค. ์ด๋ ์ฝ๊ธฐ ์ ๊ธ์ ํ์์ฑ์ ํฌ๊ฒ ์ค์ฌ ์ฝ๊ธฐ ์์ ๊ณผ ์ฐ๊ธฐ ์์ ์ด ์๋ก๋ฅผ ์ฐจ๋จํ์ง ์๊ณ ๋์์ ์๋ํ ์ ์๊ฒ ํฉ๋๋ค. ์ด๋ ํนํ ์ฝ๊ธฐ ์ค์ฌ์ ์ํฌ๋ก๋์์ ๋ ๋์ ์ฑ๋ฅ์ผ๋ก ์ด์ด์ง๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค.
๊ณ ๋ฆฝ ์์ค(SQL ํ์ค)
SQL ํ์ค์ ์ฌ๋ฌ ๊ณ ๋ฆฝ ์์ค์ ์ ์ํ์ฌ ๊ฐ๋ฐ์๊ฐ ์๊ฒฉํ ๊ณ ๋ฆฝ๊ณผ ์ฑ๋ฅ ์ฌ์ด์์ ๊ท ํ์ ์ ํํ ์ ์๋๋ก ํฉ๋๋ค. ๋ฎ์ ๊ณ ๋ฆฝ ์์ค์ ๋ ๋์ ๋์์ฑ์ ์ ๊ณตํ์ง๋ง ํธ๋์ญ์ ์ ํน์ ๋ฐ์ดํฐ ์ด์ ํ์์ ๋ ธ์ถ์ํฌ ์ ์์ผ๋ฉฐ, ๋์ ์์ค์ ์ ์ฌ์ ์ธ ์ฑ๋ฅ ๋ณ๋ชฉ ํ์์ ๋๊ฐ๋ก ๋ ๊ฐ๋ ฅํ ๋ณด์ฅ์ ์ ๊ณตํฉ๋๋ค.
- Read Uncommitted: ๊ฐ์ฅ ๋ฎ์ ๊ณ ๋ฆฝ ์์ค. ํธ๋์ญ์ ์ด ๋ค๋ฅธ ํธ๋์ญ์ ์ ์ํด ์ด๋ฃจ์ด์ง ์ปค๋ฐ๋์ง ์์ ๋ณ๊ฒฝ ์ฌํญ์ ์ฝ์ ์ ์์ต๋๋ค("๋ํฐ ๋ฆฌ๋(dirty read)" ๋ฐ์). ์ด๋ ์ต๋์ ๋์์ฑ์ ์ ๊ณตํ์ง๋ง ์ผ๊ด๋์ง ์์ ๋ฐ์ดํฐ์ ์ํ์ด ๋์ ๊ฑฐ์ ์ฌ์ฉ๋์ง ์์ต๋๋ค.
- Read Committed: ๋ํฐ ๋ฆฌ๋๋ฅผ ๋ฐฉ์งํฉ๋๋ค(ํธ๋์ญ์ ์ ์ปค๋ฐ๋ ํธ๋์ญ์ ์ ๋ณ๊ฒฝ ์ฌํญ๋ง ๋ณผ ์ ์์). ๊ทธ๋ฌ๋ ์ฌ์ ํ "๋ฐ๋ณต ๋ถ๊ฐ๋ฅํ ์ฝ๊ธฐ(non-repeatable read)"(ํธ๋์ญ์ ๋ด์์ ๋์ผํ ํ์ ๋ ๋ฒ ์ฝ์์ ๋ ๋ค๋ฅธ ํธ๋์ญ์ ์ด ๊ทธ ์ฌ์ด์ ํด๋น ํ์ ๋ํ ์ ๋ฐ์ดํธ๋ฅผ ์ปค๋ฐํ๋ฉด ๋ค๋ฅธ ๊ฐ์ด ๋ฐํ๋จ)์ "ํฌํ ๋ฆฌ๋(phantom read)"(ํธ๋์ญ์ ๋ด์์ ๋ ๋ฒ ์คํ๋ ์ฟผ๋ฆฌ๊ฐ ๋ค๋ฅธ ํธ๋์ญ์ ์ด ๊ทธ ์ฌ์ด์ ์ฝ์ /์ญ์ ์์ ์ ์ปค๋ฐํ๋ฉด ๋ค๋ฅธ ํ ์งํฉ์ ๋ฐํํจ)๋ฅผ ๊ฒช์ ์ ์์ต๋๋ค.
- Repeatable Read: ๋ํฐ ๋ฆฌ๋์ ๋ฐ๋ณต ๋ถ๊ฐ๋ฅํ ์ฝ๊ธฐ๋ฅผ ๋ฐฉ์งํฉ๋๋ค. ํธ๋์ญ์ ์ ์ด๋ฏธ ์ฝ์ ํ์ ๋ํด ๋์ผํ ๊ฐ์ ์ฝ๋ ๊ฒ์ด ๋ณด์ฅ๋ฉ๋๋ค. ๊ทธ๋ฌ๋ ํฌํ ๋ฆฌ๋๋ ์ฌ์ ํ ๋ฐ์ํ ์ ์์ต๋๋ค(์: `COUNT(*)` ์ฟผ๋ฆฌ๊ฐ ๋ค๋ฅธ ํธ๋์ญ์ ์ ์ํด ์ ํ์ด ์ฝ์ ๋๋ฉด ๋ค๋ฅธ ํ ์๋ฅผ ๋ฐํํ ์ ์์).
- Serializable: ๊ฐ์ฅ ๋๊ณ ๊ฐ์ฅ ์๊ฒฉํ ๊ณ ๋ฆฝ ์์ค. ๋ํฐ ๋ฆฌ๋, ๋ฐ๋ณต ๋ถ๊ฐ๋ฅํ ์ฝ๊ธฐ, ํฌํ ๋ฆฌ๋๋ฅผ ๋ฐฉ์งํฉ๋๋ค. ํธ๋์ญ์ ์ ๋ค๋ฅธ ํธ๋์ญ์ ์ด ๋์์ ์คํ๋์ง ์๋ ๊ฒ์ฒ๋ผ ์ง๋ ฌ๋ก ์คํ๋๋ ๊ฒ์ฒ๋ผ ๋ณด์ ๋๋ค. ์ด๋ ๊ฐ์ฅ ๊ฐ๋ ฅํ ๋ฐ์ดํฐ ์ผ๊ด์ฑ์ ์ ๊ณตํ์ง๋ง ๊ด๋ฒ์ํ ์ ๊ธ์ผ๋ก ์ธํด ๊ฐ์ฅ ๋์ ์ฑ๋ฅ ์ค๋ฒํค๋๋ฅผ ๋๋ฐํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค.
๊ณ ๋ฆฝ์ฑ์ ์ค์์ฑ์ ๋ํ ์ค์ ์ฌ๋ก
- ์ฌ๊ณ ๊ด๋ฆฌ: ์๋ก ๋ค๋ฅธ ์๊ฐ๋์ ์์นํ ๋ ๋ช ์ ๊ณ ๊ฐ์ด ๋์์ ์ธ๊ธฐ ์ํ์ ๋ง์ง๋ง ๋จ์ ์ฌ๊ณ ๋ฅผ ๊ตฌ๋งคํ๋ ค๊ณ ํ๋ค๊ณ ์์ํด ๋ณด์ธ์. ์ ์ ํ ๊ณ ๋ฆฝ ์์ด๋ ๋ ๋ค ํด๋น ์ํ์ ๊ตฌ๋งค ๊ฐ๋ฅํ๋ค๊ณ ๋ณผ ์ ์์ด ์ด๊ณผ ํ๋งค๋ก ์ด์ด์ง ์ ์์ต๋๋ค. ๊ณ ๋ฆฝ์ ์ค์ง ํ๋์ ํธ๋์ญ์ ๋ง์ด ์ฑ๊ณต์ ์ผ๋ก ์ํ์ ํ๋ณดํ๊ณ ๋ค๋ฅธ ํ๋๋ ํ์ ํต๋ณด๋ฅผ ๋ฐ๋๋ก ๋ณด์ฅํฉ๋๋ค.
- ์ฌ๋ฌด ๋ณด๊ณ : ๋ถ์๊ฐ๊ฐ ๋๊ท๋ชจ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ฌ๋ฌด ๋ฐ์ดํฐ๋ฅผ ์ง๊ณํ๋ ๋ณต์กํ ๋ณด๊ณ ์๋ฅผ ์คํํ๋ ๋์์, ํ๊ณ ํธ๋์ญ์ ์ด ๋ค์ํ ์ฅ๋ถ ํญ๋ชฉ์ ํ๋ฐํ๊ฒ ์ ๋ฐ์ดํธํ๊ณ ์์ต๋๋ค. ๊ณ ๋ฆฝ์ ๋ถ์๊ฐ์ ๋ณด๊ณ ์๊ฐ ์งํ ์ค์ธ ์ ๋ฐ์ดํธ์ ์ํฅ์ ๋ฐ์ง ์๋ ์ผ๊ด๋ ๋ฐ์ดํฐ ์ค๋ ์ท์ ๋ฐ์ํ๋๋ก ๋ณด์ฅํ์ฌ ์ ํํ ์ฌ๋ฌด ์์น๋ฅผ ์ ๊ณตํฉ๋๋ค.
- ์ข์ ์์ฝ ์์คํ : ์ฌ๋ฌ ์ฌ์ฉ์๊ฐ ์ฝ์ํธ๋ ํญ๊ณตํธ์ ๋์ผํ ์ข์์ ์์ฝํ๋ ค๊ณ ํฉ๋๋ค. ๊ณ ๋ฆฝ์ ์ด์ค ์์ฝ์ ๋ฐฉ์งํฉ๋๋ค. ํ ์ฌ์ฉ์๊ฐ ์ข์์ ๋ํ ์์ฝ ์ ์ฐจ๋ฅผ ์์ํ๋ฉด, ํด๋น ์ข์์ ์ข ์ข ์ผ์์ ์ผ๋ก ์ ๊ฒจ ๋ค๋ฅธ ์ฌ์ฉ์๊ฐ ์ฒซ ๋ฒ์งธ ์ฌ์ฉ์์ ํธ๋์ญ์ ์ด ์ปค๋ฐ๋๊ฑฐ๋ ๋กค๋ฐฑ๋ ๋๊น์ง ํด๋น ์ข์์ ์ด์ฉ ๊ฐ๋ฅํ๋ค๊ณ ๋ณด์ง ๋ชปํ๊ฒ ํฉ๋๋ค.
๊ณ ๋ฆฝ์ฑ์ ๊ณผ์
๊ฐ๋ ฅํ ๊ณ ๋ฆฝ์ ๋ฌ์ฑํ๋ ๊ฒ์ ์ผ๋ฐ์ ์ผ๋ก ์ฑ๋ฅ๊ณผ์ ํธ๋ ์ด๋์คํ๋ฅผ ์๋ฐํฉ๋๋ค. ๋์ ๊ณ ๋ฆฝ ์์ค์ ๋ ๋ง์ ์ ๊ธ ๋๋ ๋ฒ์ ๊ด๋ฆฌ ์ค๋ฒํค๋๋ฅผ ๋์ ํ์ฌ ๋์์ฑ๊ณผ ์ฒ๋ฆฌ๋์ ๊ฐ์์ํฌ ์ ์์ต๋๋ค. ๊ฐ๋ฐ์๋ ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ ์๊ตฌ ์ฌํญ๊ณผ ์ฑ๋ฅ ๊ธฐ๋์น ์ฌ์ด์ ๊ท ํ์ ๋ง์ถ์ด ์ ํ๋ฆฌ์ผ์ด์ ์ ํน์ ์๊ตฌ์ ๋ง๋ ์ ์ ํ ๊ณ ๋ฆฝ ์์ค์ ์ ์คํ๊ฒ ์ ํํด์ผ ํฉ๋๋ค.
4. ์ง์์ฑ(Durability): ์ผ๋จ ์ปค๋ฐ๋๋ฉด ์์ํ ์ปค๋ฐ๋๋ค
์ง์์ฑ์ ํธ๋์ญ์ ์ด ์ฑ๊ณต์ ์ผ๋ก ์ปค๋ฐ๋๋ฉด ๊ทธ ๋ณ๊ฒฝ ์ฌํญ์ด ์๊ตฌ์ ์ด๋ฉฐ ์ดํ์ ์ด๋ ํ ์์คํ ์ฅ์ ์๋ ์ด์๋จ์ ๊ฒ์ ๋ณด์ฅํฉ๋๋ค. ์ฌ๊ธฐ์๋ ์ ์ , ํ๋์จ์ด ์ค์๋, ์ด์ ์ฒด์ ์ถฉ๋ ๋๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์คํ ์ด ์๊ธฐ์น ์๊ฒ ์ข ๋ฃ๋ ์ ์๋ ๊ธฐํ ๋น์ฌ์์ ์ธ ์ด๋ฒคํธ๊ฐ ํฌํจ๋ฉ๋๋ค. ์ปค๋ฐ๋ ๋ณ๊ฒฝ ์ฌํญ์ ์์คํ ์ด ๋ค์ ์์๋ ๋ ์กด์ฌํ๊ณ ๋ณต๊ตฌ ๊ฐ๋ฅํจ์ด ๋ณด์ฅ๋ฉ๋๋ค.
์ง์์ฑ์ ๊ตฌํ: ๋ก๊น ๊ณผ ๋ณต๊ตฌ
๋ฐ์ดํฐ๋ฒ ์ด์ค ์์คํ ์ ๊ฒฌ๊ณ ํ ๋ก๊น ๋ฐ ๋ณต๊ตฌ ๋ฉ์ปค๋์ฆ์ ํตํด ์ง์์ฑ์ ๋ฌ์ฑํฉ๋๋ค:
- ์ฐ๊ธฐ ์ ์ฉ ๋ก๊น (Write-Ahead Logging, WAL) / ๋ฆฌ๋ ๋ก๊ทธ(Redo Logs) / ํธ๋์ญ์ ๋ก๊ทธ(Transaction Logs): ์ด๊ฒ์ด ์ง์์ฑ์ ์ด์์ ๋๋ค. ์ปค๋ฐ๋ ํธ๋์ญ์ ์ ์ํด ๋์คํฌ์ ์ค์ ๋ฐ์ดํฐ ํ์ด์ง๊ฐ ์์ ๋๊ธฐ ์ ์, ๋ณ๊ฒฝ ์ฌํญ์ ๋จผ์ ๋งค์ฐ ๋ณต์๋ ฅ ์๋ ์์ฐจ์ ์ผ๋ก ๊ธฐ๋ก๋๋ ํธ๋์ญ์ ๋ก๊ทธ์ ๊ธฐ๋ก๋ฉ๋๋ค. ์ด ๋ก๊ทธ์๋ ๋ชจ๋ ์์ ์ ์ฌ์คํ(redo)ํ๊ฑฐ๋ ์ทจ์(undo)ํ ์ ์๋ ์ถฉ๋ถํ ์ ๋ณด๊ฐ ํฌํจ๋์ด ์์ต๋๋ค. ์์คํ ์ด ์ถฉ๋ํ๋ฉด ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ์ด ๋ก๊ทธ๋ฅผ ์ฌ์ฉํ์ฌ ์์ง ์ฃผ ๋ฐ์ดํฐ ํ์ผ์ ์์ ํ ๊ธฐ๋ก๋์ง ์์์ ์ ์๋ ๋ชจ๋ ์ปค๋ฐ๋ ํธ๋์ญ์ ์ ์ฌ์(redo)ํ์ฌ ๋ณ๊ฒฝ ์ฌํญ์ด ์์ค๋์ง ์๋๋ก ๋ณด์ฅํ ์ ์์ต๋๋ค.
- ์ฒดํฌํฌ์ธํ (Checkpointing): ๋ณต๊ตฌ ์๊ฐ์ ์ต์ ํํ๊ธฐ ์ํด ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์คํ ์ ์ฃผ๊ธฐ์ ์ผ๋ก ์ฒดํฌํฌ์ธํธ๋ฅผ ์ํํฉ๋๋ค. ์ฒดํฌํฌ์ธํธ ๋์ ๋ชจ๋ ๋ํฐ ํ์ด์ง(๋ฉ๋ชจ๋ฆฌ์์ ์์ ๋์์ง๋ง ์์ง ๋์คํฌ์ ๊ธฐ๋ก๋์ง ์์ ๋ฐ์ดํฐ ํ์ด์ง)๊ฐ ๋์คํฌ์ ํ๋ฌ์๋ฉ๋๋ค. ์ด๋ ๋ณต๊ตฌ ํ๋ก์ธ์ค๊ฐ ๋ง์ง๋ง ์ฑ๊ณต์ ์ธ ์ฒดํฌํฌ์ธํธ ์ดํ์ ๋ก๊ทธ ๋ ์ฝ๋๋ง ์ฒ๋ฆฌํ๋ฉด ๋๋ฏ๋ก ์ฌ์์ ์ ์ํํด์ผ ํ ์์ ์ ์์ ์ค์ฌ์ค๋๋ค.
- ๋นํ๋ฐ์ฑ ์ ์ฅ์: ํธ๋์ญ์ ๋ก๊ทธ๋ ์ผ๋ฐ์ ์ผ๋ก ์ ์ ์ ๊ฐํ ๋นํ๋ฐ์ฑ ์ ์ฅ์(์: SSD ๋๋ ๊ธฐ์กด ํ๋ ๋๋ผ์ด๋ธ)์ ๊ธฐ๋ก๋๋ฉฐ, ์ถ๊ฐ์ ์ธ ๋ณดํธ๋ฅผ ์ํด ์ข ์ข ์ค๋ณต ๋ฐฐ์ด(RAID)์ ์ฌ์ฉํฉ๋๋ค.
- ๋ณต์ ๋ฐ ๋ฐฑ์ ์ ๋ต: WAL์ด ๋จ์ผ ๋ ธ๋ ์ฅ์ ๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฐ๋ฉด, ๋ฐ์ดํฐ ์ผํฐ ์ฅ์ ์ ๊ฐ์ ์ฌ์์ ์ธ ์ด๋ฒคํธ์ ๋ํด์๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ณต์ (์: ์ฃผ-๋๊ธฐ ๊ตฌ์ฑ, ์ง๋ฆฌ์ ๋ณต์ ) ๋ฐ ์ ๊ธฐ์ ์ธ ๋ฐฑ์ ์ ํตํด ์ง์์ฑ์ด ๋์ฑ ํฅ์๋์ด ์ ์ฒด ๋ฐ์ดํฐ ๋ณต์์ ๊ฐ๋ฅํ๊ฒ ํฉ๋๋ค.
์ง์์ฑ์ ์ค์ ์ฌ๋ก
- ๊ฒฐ์ ์ฒ๋ฆฌ: ๊ณ ๊ฐ์ ๊ฒฐ์ ๊ฐ ์ฑ๊ณต์ ์ผ๋ก ์ฒ๋ฆฌ๋๊ณ ํธ๋์ญ์ ์ด ์ปค๋ฐ๋๋ฉด, ์ํ ์์คํ ์ ์ด ๊ฒฐ์ ๊ธฐ๋ก์ด ์๊ตฌ์ ์์ ๋ณด์ฅํฉ๋๋ค. ์ปค๋ฐ ์งํ ๊ฒฐ์ ์๋ฒ๊ฐ ์ถฉ๋ํ๋๋ผ๋ ์์คํ ์ด ๋ณต๊ตฌ๋๋ฉด ๊ฒฐ์ ๋ ๊ณ ๊ฐ์ ๊ณ์ข์ ๋ฐ์๋์ด ์ฌ์ ์ ์์ค์ด๋ ๊ณ ๊ฐ ๋ถ๋ง์ ๋ฐฉ์งํฉ๋๋ค.
- ์ค์ ๋ฐ์ดํฐ ์ ๋ฐ์ดํธ: ํ ์กฐ์ง์ด ํต์ฌ ์ง์ ๊ธฐ๋ก์ ๊ธ์ฌ ์กฐ์ ์ผ๋ก ์ ๋ฐ์ดํธํฉ๋๋ค. ์ ๋ฐ์ดํธ ํธ๋์ญ์ ์ด ์ปค๋ฐ๋๋ฉด ์๋ก์ด ๊ธ์ฌ ์์น๋ ์ง์๋ฉ๋๋ค. ๊ฐ์์ค๋ฌ์ด ์ ์ ์ผ๋ก ์ธํด ์ด๋ฌํ ์ค์ํ ๋ณ๊ฒฝ ์ฌํญ์ด ๋๋๋ ค์ง๊ฑฐ๋ ์ฌ๋ผ์ง์ง ์์ ์ ํํ ๊ธ์ฌ ๋ฐ ์ธ์ฌ ๋ฐ์ดํฐ๋ฅผ ๋ณด์ฅํฉ๋๋ค.
- ๋ฒ๋ฅ ๋ฌธ์ ์์นด์ด๋น: ํ ๋ฒ๋ฅ ํ์ฌ๊ฐ ์ค์ํ ๊ณ ๊ฐ ๋ฌธ์๋ฅผ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ณด๊ดํฉ๋๋ค. ํธ๋์ญ์ ์ด ์ฑ๊ณต์ ์ผ๋ก ์ปค๋ฐ๋๋ฉด ๋ฌธ์์ ๋ฉํ๋ฐ์ดํฐ์ ๋ด์ฉ์ ์๊ตฌ์ ์ผ๋ก ์ ์ฅ๋ฉ๋๋ค. ์ด๋ ํ ์์คํ ์ค์๋๋ ์ด ๋ณด๊ด๋ ๊ธฐ๋ก์ ์๊ตฌ์ ์ธ ์์ค๋ก ์ด์ด์ ธ์๋ ์ ๋๋ฉฐ, ์ด๋ ๋ฒ๊ท ์ค์์ ์ด์ ๋ฌด๊ฒฐ์ฑ์ ์ ์งํฉ๋๋ค.
์ง์์ฑ์ ๊ณผ์
๊ฐ๋ ฅํ ์ง์์ฑ์ ๊ตฌํํ๋ ๊ฒ์ ์ฃผ๋ก ํธ๋์ญ์ ๋ก๊ทธ์ ์ฐ๊ณ ๋ฐ์ดํฐ๋ฅผ ๋์คํฌ์ ํ๋ฌ์ํ๋ I/O ์ค๋ฒํค๋๋ก ์ธํด ์ฑ๋ฅ์ ์ํฅ์ ๋ฏธ์นฉ๋๋ค. ๋ก๊ทธ ์ฐ๊ธฐ๊ฐ ๋์คํฌ์ ์ผ๊ด๋๊ฒ ๋๊ธฐํ๋๋๋ก ๋ณด์ฅํ๋ ๊ฒ(์: `fsync` ๋๋ ๋๋ฑํ ๋ช ๋ น ์ฌ์ฉ)์ ํ์์ ์ด์ง๋ง ๋ณ๋ชฉ ํ์์ด ๋ ์ ์์ต๋๋ค. ํ๋ ์ ์ฅ ๊ธฐ์ ๊ณผ ์ต์ ํ๋ ๋ก๊น ๋ฉ์ปค๋์ฆ์ ์ง์์ฑ ๋ณด์ฅ๊ณผ ์์คํ ์ฑ๋ฅ์ ๊ท ํ์ ์ง์์ ์ผ๋ก ์ถ๊ตฌํฉ๋๋ค.
์ต์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์คํ ์์์ ACID ๊ตฌํ
ACID ์์ฑ์ ๊ตฌํ ๋ฐ ์ค์ ์ฌ๋ถ๋ ๋ค์ํ ์ ํ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์คํ ์ ๋ฐ๋ผ ํฌ๊ฒ ๋ค๋ฆ ๋๋ค:
๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค(RDBMS)
MySQL, PostgreSQL, Oracle Database, Microsoft SQL Server์ ๊ฐ์ ์ ํต์ ์ธ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ด๋ฆฌ ์์คํ (RDBMS)์ ์ฒ์๋ถํฐ ACID๋ฅผ ์ค์ํ๋๋ก ์ค๊ณ๋์์ต๋๋ค. ์ด๋ค์ ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ์ ๋ณด์ฅํ๊ธฐ ์ํด ์ ๊ธ, MVCC, ์ฐ๊ธฐ ์ ์ฉ ๋ก๊น ์ ๊ฒฌ๊ณ ํ ๊ตฌํ์ ์ ๊ณตํ๋ ํธ๋์ญ์ ๊ด๋ฆฌ์ ๊ธฐ์ค์ ๋๋ค. RDBMS๋ก ์์ ํ๋ ๊ฐ๋ฐ์๋ ์ผ๋ฐ์ ์ผ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ด์ฅ ํธ๋์ญ์ ๊ด๋ฆฌ ๊ธฐ๋ฅ(์: `BEGIN TRANSACTION`, `COMMIT`, `ROLLBACK` ๋ฌธ)์ ์์กดํ์ฌ ์ ํ๋ฆฌ์ผ์ด์ ๋ก์ง์ ACID ์ค์๋ฅผ ๋ณด์ฅํฉ๋๋ค.
NoSQL ๋ฐ์ดํฐ๋ฒ ์ด์ค
RDBMS์ ๋์กฐ์ ์ผ๋ก, ๋ง์ ์ด๊ธฐ NoSQL ๋ฐ์ดํฐ๋ฒ ์ด์ค(์: Cassandra, ์ด๊ธฐ MongoDB ๋ฒ์ )๋ ์๊ฒฉํ ์ผ๊ด์ฑ๋ณด๋ค ๊ฐ์ฉ์ฑ๊ณผ ๋ถํ ํ์ฉ์ฑ์ ์ฐ์ ์ํ์ผ๋ฉฐ, ์ข ์ข BASE(Basically Available, Soft state, Eventually consistent) ์์ฑ์ ๋ฐ๋์ต๋๋ค. ์ด๋ค์ ๋ถ์ฐ ํ๊ฒฝ์์ ๋๊ท๋ชจ ํ์ฅ์ฑ๊ณผ ๊ณ ๊ฐ์ฉ์ฑ์ ์ํด ์ค๊ณ๋์์ผ๋ฉฐ, ์ด๋ฌํ ํ๊ฒฝ์์ ์๋ง์ ๋ ธ๋์ ๊ฑธ์ณ ๊ฐ๋ ฅํ ACID ๋ณด์ฅ์ ๋ฌ์ฑํ๋ ๊ฒ์ ๋งค์ฐ ์ด๋ ต๊ณ ์ฑ๋ฅ ์ง์ฝ์ ์ผ ์ ์์ต๋๋ค.
- ์ต์ข ์ผ๊ด์ฑ(Eventual Consistency): ๋ง์ NoSQL ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ์ต์ข ์ผ๊ด์ฑ์ ์ ๊ณตํฉ๋๋ค. ์ฆ, ํน์ ๋ฐ์ดํฐ ํญ๋ชฉ์ ์๋ก์ด ์ ๋ฐ์ดํธ๊ฐ ์ด๋ฃจ์ด์ง์ง ์์ผ๋ฉด ๊ฒฐ๊ตญ ํด๋น ํญ๋ชฉ์ ๋ํ ๋ชจ๋ ์ ๊ทผ์ด ๋ง์ง๋ง์ผ๋ก ์ ๋ฐ์ดํธ๋ ๊ฐ์ ๋ฐํํ๊ฒ ๋ฉ๋๋ค. ์ด๋ ์ผ๋ถ ์ฌ์ฉ ์ฌ๋ก(์: ์์ ๋ฏธ๋์ด ํผ๋)์๋ ํ์ฉ๋์ง๋ง ๋ค๋ฅธ ๊ฒฝ์ฐ(์: ๊ธ์ต ํธ๋์ญ์ )์๋ ์ ํฉํ์ง ์์ต๋๋ค.
- ์๋ก์ด ๋ํฅ(NewSQL ๋ฐ ์ต์ NoSQL ๋ฒ์ ): ํ๊ฒฝ์ ์งํํ๊ณ ์์ต๋๋ค. CockroachDB ๋ฐ TiDB์ ๊ฐ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค(์ข ์ข NewSQL๋ก ๋ถ๋ฅ๋จ)๋ NoSQL์ ์ํ์ ํ์ฅ์ฑ๊ณผ RDBMS์ ๊ฐ๋ ฅํ ACID ๋ณด์ฅ์ ๊ฒฐํฉํ๋ ๊ฒ์ ๋ชฉํ๋ก ํฉ๋๋ค. ๋ํ MongoDB ๋ฐ Apache CouchDB์ ๊ฐ์ ๋ง์ ๊ธฐ์กด NoSQL ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ์ต๊ทผ ๋ฒ์ ์์ ํธ๋์ญ์ ๊ธฐ๋ฅ์ ๋์ ํ๊ฑฐ๋ ํฌ๊ฒ ํฅ์์์ผ ๋จ์ผ ๋ณต์ ์ธํธ ๋ด ๋๋ ์ค๋ฉ๋ ํด๋ฌ์คํฐ ์ ์ฒด์์ ๋ค์ค ๋ฌธ์ ACID ํธ๋์ญ์ ์ ์ ๊ณตํจ์ผ๋ก์จ ๋ถ์ฐ NoSQL ํ๊ฒฝ์ ๋ ๊ฐ๋ ฅํ ์ผ๊ด์ฑ ๋ณด์ฅ์ ์ ๊ณตํฉ๋๋ค.
๋ถ์ฐ ์์คํ ์์์ ACID: ๊ณผ์ ์ ํด๊ฒฐ์ฑ
๋ฐ์ดํฐ๊ฐ ์ฌ๋ฌ ๋ ธ๋๋ ์๋น์ค์ ๋ถ์ฐ๋ ๋ถ์ฐ ์์คํ ์์๋ ACID ์์ฑ์ ์ ์งํ๋ ๊ฒ์ด ํจ์ฌ ๋ ๋ณต์กํด์ง๋๋ค. ๋คํธ์ํฌ ์ง์ฐ, ๋ถ๋ถ์ ์ฅ์ , ์กฐ์ ์ค๋ฒํค๋๋ ์๊ฒฉํ ACID ์ค์๋ฅผ ์ด๋ ต๊ฒ ๋ง๋ญ๋๋ค. ๊ทธ๋ฌ๋ ๋ค์ํ ํจํด๊ณผ ๊ธฐ์ ์ด ์ด๋ฌํ ๋ณต์ก์ฑ์ ํด๊ฒฐํฉ๋๋ค:
- 2๋จ๊ณ ์ปค๋ฐ(Two-Phase Commit, 2PC): ๋ถ์ฐ ์ฐธ์ฌ์ ๊ฐ์ ์์์ ์ปค๋ฐ์ ๋ฌ์ฑํ๊ธฐ ์ํ ๊ณ ์ ์ ์ธ ํ๋กํ ์ฝ์ ๋๋ค. ์์์ฑ๊ณผ ์ง์์ฑ์ ๋ณด์ฅํ์ง๋ง, ์ฑ๋ฅ ๋ณ๋ชฉ(๋๊ธฐ์ ๋ฉ์์ง์ผ๋ก ์ธํด) ๋ฐ ๊ฐ์ฉ์ฑ ๋ฌธ์ (์ฝ๋๋ค์ดํฐ๊ฐ ์คํจํ ๊ฒฝ์ฐ)๋ฅผ ๊ฒช์ ์ ์์ต๋๋ค.
- ์ฌ๊ฐ ํจํด(Sagas Pattern): ํนํ ๋ง์ดํฌ๋ก์๋น์ค ์ํคํ ์ฒ์์ ์ธ๊ธฐ ์๋ ์ฅ๊ธฐ ์คํ ๋ถ์ฐ ํธ๋์ญ์ ์ ๋์์ ๋๋ค. ์ฌ๊ฐ๋ ๋ก์ปฌ ํธ๋์ญ์ ์ ์ํ์ค๋ก, ๊ฐ ๋ก์ปฌ ํธ๋์ญ์ ์ ์์ฒด ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ ๋ฐ์ดํธํ๊ณ ์ด๋ฒคํธ๋ฅผ ๊ฒ์ํฉ๋๋ค. ๋จ๊ณ๊ฐ ์คํจํ๋ฉด ์ด์ ์ ์ฑ๊ณต์ ์ธ ๋จ๊ณ์ ํจ๊ณผ๋ฅผ ๋๋๋ฆฌ๊ธฐ ์ํด ๋ณด์ ํธ๋์ญ์ ์ด ์คํ๋ฉ๋๋ค. ์ฌ๊ฐ๋ ์ต์ข ์ผ๊ด์ฑ๊ณผ ์์์ฑ์ ์ ๊ณตํ์ง๋ง ๋กค๋ฐฑ ๋ก์ง์ ๋ํ ์ ์คํ ์ค๊ณ๊ฐ ํ์ํฉ๋๋ค.
- ๋ถ์ฐ ํธ๋์ญ์ ์ฝ๋๋ค์ดํฐ: ์ผ๋ถ ํด๋ผ์ฐ๋ ํ๋ซํผ ๋ฐ ์ํฐํ๋ผ์ด์ฆ ์์คํ ์ ๋ถ์ฐ ํธ๋์ญ์ ์ ์ฉ์ดํ๊ฒ ํ๋ ๊ด๋ฆฌํ ์๋น์ค ๋๋ ํ๋ ์์ํฌ๋ฅผ ์ ๊ณตํ์ฌ ๊ธฐ๋ณธ ๋ณต์ก์ฑ ์ค ์ผ๋ถ๋ฅผ ์ถ์ํํฉ๋๋ค.
์ฌ๋ฐ๋ฅธ ์ ๊ทผ ๋ฐฉ์ ์ ํ: ACID์ ์ฑ๋ฅ์ ๊ท ํ
ACID ์์ฑ์ ๊ตฌํํ ์ง ์ฌ๋ถ์ ๋ฐฉ๋ฒ์ ๊ฒฐ์ ํ๋ ๊ฒ์ ์ค์ํ ์ํคํ ์ฒ ์ ํ์ ๋๋ค. ๋ชจ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ต๊ณ ์์ค์ ACID ์ค์๋ฅผ ์๊ตฌํ๋ ๊ฒ์ ์๋๋ฉฐ, ๋ถํ์ํ๊ฒ ์ด๋ฅผ ์ถ๊ตฌํ๋ฉด ์๋นํ ์ฑ๋ฅ ์ค๋ฒํค๋๋ฅผ ์ด๋ํ ์ ์์ต๋๋ค. ๊ฐ๋ฐ์์ ์ํคํ ํธ๋ ํน์ ์ฌ์ฉ ์ฌ๋ก๋ฅผ ์ ์คํ๊ฒ ํ๊ฐํด์ผ ํฉ๋๋ค:
- ์ค์ ์์คํ : ๊ธ์ต ํธ๋์ญ์ , ์๋ฃ ๊ธฐ๋ก, ์ฌ๊ณ ๊ด๋ฆฌ ๋๋ ๋ฒ๋ฅ ๋ฌธ์๋ฅผ ์ฒ๋ฆฌํ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฒฝ์ฐ, ๋ฐ์ดํฐ ์์์ ๋ฐฉ์งํ๊ณ ๊ท์ ์ค์๋ฅผ ๋ณด์ฅํ๊ธฐ ์ํด ๊ฐ๋ ฅํ ACID ๋ณด์ฅ(์ข ์ข Serializable ๊ณ ๋ฆฝ ์์ค)์ ํ์์ ์ฌ์ง๊ฐ ์์ต๋๋ค. ์ด๋ฌํ ์๋๋ฆฌ์ค์์๋ ๋ถ์ผ์น์ ๋น์ฉ์ด ์ฑ๋ฅ ์ค๋ฒํค๋๋ฅผ ํจ์ฌ ๋ฅ๊ฐํฉ๋๋ค.
- ๊ณ ์ฒ๋ฆฌ๋, ์ต์ข ์ผ๊ด์ฑ ์์คํ : ์์ ๋ฏธ๋์ด ํผ๋, ๋ถ์ ๋์๋ณด๋ ๋๋ ํน์ IoT ๋ฐ์ดํฐ ํ์ดํ๋ผ์ธ๊ณผ ๊ฐ์ด ์ผ๊ด์ฑ์ ์ฝ๊ฐ์ ์ง์ฐ์ด ํ์ฉ๋๊ณ ๋ฐ์ดํฐ๊ฐ ๊ฒฐ๊ตญ ์์ฒด ์์ ๋๋ ์์คํ ์ ๊ฒฝ์ฐ, ๊ฐ์ฉ์ฑ๊ณผ ์ฒ๋ฆฌ๋์ ๊ทน๋ํํ๊ธฐ ์ํด ์ฝํ ์ผ๊ด์ฑ ๋ชจ๋ธ(์: ์ต์ข ์ผ๊ด์ฑ)๊ณผ ๋ฎ์ ๊ณ ๋ฆฝ ์์ค์ด ์ ํ๋ ์ ์์ต๋๋ค.
- ํธ๋ ์ด๋์คํ ์ดํด: ๋ค์ํ ๊ณ ๋ฆฝ ์์ค์ ์ํฅ์ ์ดํดํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. ์๋ฅผ ๋ค์ด, `READ COMMITTED`๋ ๋ง์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ข์ ๊ท ํ์ ์ ๊ณตํ์ฌ ๋ํฐ ๋ฆฌ๋๋ฅผ ๋ฐฉ์งํ๋ฉด์ ๋์์ฑ์ ๊ณผ๋ํ๊ฒ ์ ํํ์ง ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ด ํธ๋์ญ์ ๋ด์์ ๋์ผํ ๋ฐ์ดํฐ๋ฅผ ์ฌ๋ฌ ๋ฒ ์ฝ๊ณ ๋์ผํ ๊ฒฐ๊ณผ๋ฅผ ๊ธฐ๋ํ๋ค๋ฉด `REPEATABLE READ` ๋๋ `SERIALIZABLE`์ด ํ์ํ ์ ์์ต๋๋ค.
- ์ ํ๋ฆฌ์ผ์ด์ ์์ค ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ: ๋๋ก๋ ๊ธฐ๋ณธ์ ์ธ ๋ฌด๊ฒฐ์ฑ ๊ท์น(์: null ๋ถํ ์ฒดํฌ)์ด ๋ฐ์ดํฐ๊ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋๋ฌํ๊ธฐ ์ ์ ์ ํ๋ฆฌ์ผ์ด์ ์์ค์์ ๊ฐ์ ๋ ์ ์์ต๋๋ค. ์ด๊ฒ์ด ACID๋ฅผ ์ํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์ค ์ ์ฝ ์กฐ๊ฑด์ ๋์ฒดํ์ง๋ ์์ง๋ง, ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ถํ๋ฅผ ์ค์ด๊ณ ์ฌ์ฉ์์๊ฒ ๋ ๋น ๋ฅธ ํผ๋๋ฐฑ์ ์ ๊ณตํ ์ ์์ต๋๋ค.
CAP ์ด๋ก (CAP Theorem)์ ์ฃผ๋ก ๋ถ์ฐ ์์คํ ์ ์ ์ฉ๋์ง๋ง, ์ด ๊ทผ๋ณธ์ ์ธ ํธ๋ ์ด๋์คํ๋ฅผ ๊ฐ์กฐํฉ๋๋ค: ๋ถ์ฐ ์์คํ ์ ์ผ๊ด์ฑ(Consistency), ๊ฐ์ฉ์ฑ(Availability), ๋ถํ ํ์ฉ์ฑ(Partition Tolerance)์ด๋ผ๋ ์ธ ๊ฐ์ง ์์ฑ ์ค ๋ ๊ฐ์ง๋ง ๋ณด์ฅํ ์ ์์ต๋๋ค. ACID์ ๋งฅ๋ฝ์์, ์ด๋ ์๋ฒฝํ๊ณ ์ ์ญ์ ์ด๋ฉฐ ์ค์๊ฐ์ธ ์ผ๊ด์ฑ์ ์ข ์ข ๊ฐ์ฉ์ฑ์ ํฌ์ํ๊ฑฐ๋ ์์คํ ์ด ๋ถ์ฐ๋ ๋ ๋ณต์กํ๊ณ ๋์ ์ค๋ฒํค๋๊ฐ ๋๋ ์๋ฃจ์ ์ ์๊ตฌํ๋ค๋ ๊ฒ์ ์๊ธฐ์ํต๋๋ค.
ํธ๋์ญ์ ๊ด๋ฆฌ๋ฅผ ์ํ ๋ชจ๋ฒ ์ฌ๋ก
ํจ๊ณผ์ ์ธ ํธ๋์ญ์ ๊ด๋ฆฌ๋ ๋จ์ํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์์กดํ๋ ๊ฒ์ ๋์ด, ์ ์คํ ์ ํ๋ฆฌ์ผ์ด์ ์ค๊ณ์ ์ด์ ๊ท์จ์ ํฌํจํฉ๋๋ค:
- ํธ๋์ญ์ ์ ์งง๊ฒ ์ ์งํ์ธ์: ํธ๋์ญ์ ์ ๊ฐ๋ฅํ ํ ๊ฐ๊ฒฐํ๊ฒ ์ค๊ณํ์ธ์. ๊ธด ํธ๋์ญ์ ์ ์ฅ์๊ฐ ์ ๊ธ์ ์ ์งํ์ฌ ๋์์ฑ์ ๊ฐ์์ํค๊ณ ๊ต์ฐฉ ์ํ์ ๊ฐ๋ฅ์ฑ์ ๋์ ๋๋ค.
- ์ ๊ธ ๊ฒฝํฉ ์ต์ํ: ๊ต์ฐฉ ์ํ๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด ํธ๋์ญ์ ๊ฐ์ ์ผ๊ด๋ ์์๋ก ๊ณต์ ๋ฆฌ์์ค์ ์ ๊ทผํ์ธ์. ํ์ํ ๊ฒ๋ง, ๊ฐ๋ฅํ ํ ์งง์ ์๊ฐ ๋์๋ง ์ ๊ทธ์ธ์.
- ์ ์ ํ ๊ณ ๋ฆฝ ์์ค ์ ํ: ๊ฐ ์์ ์ ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ ์๊ตฌ ์ฌํญ์ ์ดํดํ๊ณ , ๊ทธ ์๊ตฌ๋ฅผ ์ถฉ์กฑ์ํค๋ฉด์๋ ๊ฐ๋ฅํ ๊ฐ์ฅ ๋ฎ์ ๊ณ ๋ฆฝ ์์ค์ ์ ํํ์ธ์. `READ COMMITTED`๋ก ์ถฉ๋ถํ๋ค๋ฉด `SERIALIZABLE`์ ๊ธฐ๋ณธ์ผ๋ก ์ฌ์ฉํ์ง ๋ง์ธ์.
- ์ค๋ฅ ๋ฐ ๋กค๋ฐฑ์ ์ฐ์ํ๊ฒ ์ฒ๋ฆฌํ์ธ์: ์ ํ๋ฆฌ์ผ์ด์ ์ฝ๋์ ๊ฒฌ๊ณ ํ ์ค๋ฅ ์ฒ๋ฆฌ ๊ธฐ๋ฅ์ ๊ตฌํํ์ฌ ํธ๋์ญ์ ์คํจ๋ฅผ ๊ฐ์งํ๊ณ ๋กค๋ฐฑ์ ์ ์ํ๊ฒ ์์ํ์ธ์. ํธ๋์ญ์ ์ด ์คํจํ์ ๋ ์ฌ์ฉ์์๊ฒ ๋ช ํํ ํผ๋๋ฐฑ์ ์ ๊ณตํ์ธ์.
- ๋ฐฐ์น ์์ ์ ์ ๋ต์ ์ผ๋ก ์ํํ์ธ์: ๋๊ท๋ชจ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ์์ ์ ๊ฒฝ์ฐ, ์ด๋ฅผ ๋ ์๊ณ ๊ด๋ฆฌ ๊ฐ๋ฅํ ํธ๋์ญ์ ์ผ๋ก ๋๋๋ ๊ฒ์ ๊ณ ๋ คํ์ธ์. ์ด๋ ๋จ์ผ ์คํจ์ ์ํฅ์ ์ ํํ๊ณ ํธ๋์ญ์ ๋ก๊ทธ๋ฅผ ๋ ์๊ฒ ์ ์งํฉ๋๋ค.
- ํธ๋์ญ์ ๋์์ ์๊ฒฉํ๊ฒ ํ ์คํธํ์ธ์: ํ ์คํธ ์ค์ ๋์ ์ ๊ทผ ๋ฐ ๋ค์ํ ์คํจ ์๋๋ฆฌ์ค๋ฅผ ์๋ฎฌ๋ ์ด์ ํ์ฌ ์ ํ๋ฆฌ์ผ์ด์ ๊ณผ ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ์คํธ๋ ์ค ์ํฉ์์ ํธ๋์ญ์ ์ ์ฌ๋ฐ๋ฅด๊ฒ ์ฒ๋ฆฌํ๋์ง ํ์ธํ์ธ์.
- ์ฌ์ฉํ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ํน์ ๊ตฌํ์ ์ดํดํ์ธ์: ๊ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์คํ ์ ACID ๊ตฌํ์ ๋ฏธ๋ฌํ ์ฐจ์ด๊ฐ ์์ต๋๋ค(์: MVCC ์๋ ๋ฐฉ์, ๊ธฐ๋ณธ ๊ณ ๋ฆฝ ์์ค). ์ต์ ์ ์ฑ๋ฅ๊ณผ ์ ๋ขฐ์ฑ์ ์ํด ์ด๋ฌํ ํน์ฑ์ ์ต์ํด์ง์ธ์.
๊ฒฐ๋ก : ACID์ ์์์ ์ธ ๊ฐ์น
ACID ์์ฑ โ ์์์ฑ, ์ผ๊ด์ฑ, ๊ณ ๋ฆฝ์ฑ, ์ง์์ฑ โ ์ ๋จ์ํ ์ด๋ก ์ ์ธ ๊ฐ๋ ์ด ์๋๋๋ค. ์ด๋ค์ ์ ๋ขฐํ ์ ์๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์คํ ๊ณผ ๋์๊ฐ ์ ์ธ๊ณ์ ์ ๋ขฐํ ์ ์๋ ๋์งํธ ์๋น์ค๊ฐ ๊ตฌ์ถ๋๋ ๊ทผ๋ณธ์ ์ธ ๊ธฐ๋ฐ์ ๋๋ค. ์ด๋ค์ ์ฐ๋ฆฌ๊ฐ ๋ฐ์ดํฐ๋ฅผ ์ ๋ขฐํ๋ ๋ฐ ํ์ํ ๋ณด์ฅ์ ์ ๊ณตํ๋ฉฐ, ์์ ํ ๊ธ์ต ๊ฑฐ๋์์๋ถํฐ ์ ํํ ๊ณผํ ์ฐ๊ตฌ์ ์ด๋ฅด๊ธฐ๊น์ง ๋ชจ๋ ๊ฒ์ ๊ฐ๋ฅํ๊ฒ ํฉ๋๋ค.
๋ถ์ฐ ์์คํ ๊ณผ ๋ค์ํ ๋ฐ์ดํฐ ์ ์ฅ์๊ฐ ์ ์ ๋ ๋ณดํธํ๋๋ฉด์ ์ํคํ ์ฒ ํ๊ฒฝ์ด ๊ณ์ ์งํํ๊ณ ์์ง๋ง, ACID์ ํต์ฌ ์์น์ ์ฌ์ ํ ๋งค์ฐ ์ค์ํฉ๋๋ค. ์ต์ NoSQL ๋ฐ NewSQL ์ ํ์ ํฌํจํ ํ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์๋ฃจ์ ์ ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ์ด ๋ง์ ์ค์ํ ์ ํ๋ฆฌ์ผ์ด์ ์ ์์ด ํ์ ๋ถ๊ฐ๋ฅํ ์๊ตฌ ์ฌํญ์์ ์ธ์ํ๊ณ , ๊ณ ๋๋ก ๋ถ์ฐ๋ ํ๊ฒฝ์์๋ ACID์ ์ ์ฌํ ๋ณด์ฅ์ ์ ๊ณตํ๋ ํ์ ์ ์ธ ๋ฐฉ๋ฒ์ ์ง์์ ์ผ๋ก ์ฐพ๊ณ ์์ต๋๋ค.
ACID ์์ฑ์ ์ดํดํ๊ณ ์ฌ๋ฐ๋ฅด๊ฒ ๊ตฌํํจ์ผ๋ก์จ ๊ฐ๋ฐ์์ ๋ฐ์ดํฐ ์ ๋ฌธ๊ฐ๋ ์ฅ์ ์ ๊ฒฌ๋๊ณ , ๋ฐ์ดํฐ ์ ํ์ฑ์ ์ ์งํ๋ฉฐ, ์ผ๊ด๋ ๋์์ ๋ณด์ฅํ๋ ๋ณต์๋ ฅ ์๋ ์์คํ ์ ๊ตฌ์ถํ ์ ์์ต๋๋ค. ์ด๋ ์ฐ๋ฆฌ ๊ธ๋ก๋ฒ ๊ฒฝ์ ์ ์ผ์์ํ์ ์์ง์ด๋ ๋ฐฉ๋ํ ์ ๋ณด์ ๋ฐ๋ค์ ๋ํ ์ ๋ขฐ๋ฅผ ์กฐ์ฑํฉ๋๋ค. ACID๋ฅผ ๋ง์คํฐํ๋ ๊ฒ์ ๋จ์ํ ๊ธฐ์ ์ ์ง์์ ๊ดํ ๊ฒ์ด ์๋๋ผ, ๋์งํธ ๋ฏธ๋์ ๋ํ ์ ๋ขฐ๋ฅผ ๊ตฌ์ถํ๋ ๊ฒ์ ๋๋ค.